// Token管理工具
class TokenManager {
  private readonly TOKEN_KEY = 'aoma_ai_token'
  
  /**
   * 设置token
   * @param token - JWT token字符串
   */
  setToken(token: string): void {
    try {
      localStorage.setItem(this.TOKEN_KEY, token)
    } catch (error) {
      console.error('设置token失败:', error)
    }
  }
  
  /**
   * 获取token
   * @returns token字符串或null
   */
  getToken(): string | null {
    try {
      return localStorage.getItem(this.TOKEN_KEY)
    } catch (error) {
      console.error('获取token失败:', error)
      return null
    }
  }
  
  /**
   * 清空token
   */
  clearToken(): void {
    try {
      localStorage.removeItem(this.TOKEN_KEY)
    } catch (error) {
      console.error('清空token失败:', error)
    }
  }
  
  /**
   * 检查token是否存在
   * @returns boolean
   */
  hasToken(): boolean {
    const token = this.getToken()
    return token !== null && token.trim() !== ''
  }
  
  /**
   * 检查token是否过期（简单检查）
   * @returns boolean - true表示已过期或无效
   */
  isTokenExpired(): boolean {
    const token = this.getToken()
    if (!token) return true
    
    try {
      // 检查token格式是否正确（JWT应该有3个部分）
      const parts = token.split('.')
      if (parts.length !== 3) {
        console.warn('Token格式不正确')
        return true
      }
      
      // 解析JWT token的payload部分
      const payload = JSON.parse(atob(parts[1]))
      const currentTime = Math.floor(Date.now() / 1000)
      
      // 检查是否有过期时间字段
      if (payload.exp) {
        return payload.exp < currentTime
      }
      
      // 如果没有过期时间，认为token有效
      return false
    } catch (error) {
      console.error('解析token失败:', error)
      return true
    }
  }
  
  /**
   * 获取token中的用户信息
   * @returns 用户信息对象或null
   */
  getUserInfo(): any {
    const token = this.getToken()
    if (!token) return null
    
    try {
      // 检查token格式是否正确（JWT应该有3个部分）
      const parts = token.split('.')
      if (parts.length !== 3) {
        console.warn('Token格式不正确')
        return null
      }
      
      const payload = JSON.parse(atob(parts[1]))
      return {
        username: payload.username || '用户',
        exp: payload.exp,
        iat: payload.iat
      }
    } catch (error) {
      console.error('解析用户信息失败:', error)
      return null
    }
  }
}

// 导出单例实例
export const tokenManager = new TokenManager()

// 导出类型
export type { TokenManager }